import axios from 'axios'
// 导入Vue-router
import router from '../router/index'
// 导入 Vuex 获取全局的Vuex组件(获取token)
import store from '../store/index'
// const baseURL = 'http://ihrm-java.itheima.net/api/'

// 创建一个axios实例对象
const instance = axios.create({
  // 基准路径 通过 开发环境 和 生产环境 文件进行配置(开发和生产单独设置 方便区分 脚手架方法需要重启)
  baseURL: process.env.VUE_APP_BASE_API
  // baseURL: baseURL,
  // 超时,如果超过10秒，后端没有返回数据，那么就报错
  // timeout: 10000
})

export default (options) => {
  return instance({
    // 请求方式
    method: options.method || 'GET',
    // 请求地址
    url: options.url,
    // post/put 请求体传递的参数
    data: options.data,
    // get 请求传参
    params: options.params,
    // 请求头
    headers: options.headers
  })
}

// 响应拦截器
instance.interceptors.response.use(response => {
  // 在获取到数据后做些什么
  // 对响应数据做点什么：去掉axios默认包装的data属性
  return response.data
}, error => {
  // 对响应错误做点什么
  // 判断用户的token是否失效 如果失效 删除用户信息 跳转到登录页
  if (error.response.status === 401 && error.response.data.code === 10002) {
    // 导入Vuex的实例化对象 删除用户的信息
    // token过期了，删除脱误的用户信息，跳转到登录页
    store.commit('user/updateUserInfo', null)
    store.commit('user/removeToken')
    return router.push('/login')
  }
  return Promise.reject(error)
})

// 请求拦截器
instance.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  // 判断是否存在token(从Vuex全局组件中 获取其token)
  if (store.getters.token) {
    // 如果token存在 注入token (注入到请求头中)
    // config是发送的数据 headers是axios请求头
    config.headers = {
      // 在请求头中 携带token 获取用户信息
      // Authorization是后端接口判断token的属性名
      Authorization: `Bearer ${store.getters.token}` // 后端需求必和Bearer拼接
    }
  }
  // 返回一下
  return config
}, function (error) {
  // 对请求错误做些什么
  // 如果没获取到token 打印错误
  return Promise.reject(error)
})
